{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Boston"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 实验说明\n",
    "\n",
    "在这个实验中利用回归模型对波士顿房价进行预测."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import ElasticNetCV\n",
    "import sklearn.datasets\n",
    "from pprint import pprint\n",
    "from sklearn.preprocessing import PolynomialFeatures, StandardScaler\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "import warnings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def not_empty(s):\n",
    "    return s != ''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "样本个数：506, 特征个数：13\n",
      "(506, 1)\n"
     ]
    }
   ],
   "source": [
    "warnings.filterwarnings(action='ignore')\n",
    "np.set_printoptions(suppress=True)\n",
    "file_data = pd.read_csv('housing.data', header=None)\n",
    "# a = np.array([float(s) for s in str if s != ''])\n",
    "data = np.empty((len(file_data), 14))\n",
    "for i, d in enumerate(file_data.values):\n",
    "    d = list(map(float, list(filter(not_empty, d[0].split(' ')))))\n",
    "    data[i] = d\n",
    "x, y = np.split(data, (13, ), axis=1)\n",
    "# data = sklearn.datasets.load_boston()\n",
    "# x = np.array(data.data)\n",
    "# y = np.array(data.target)\n",
    "print('样本个数：%d, 特征个数：%d' % x.shape)\n",
    "print(y.shape)\n",
    "y = y.ravel()\n",
    "\n",
    "x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=0)\n",
    "model = Pipeline([\n",
    "    ('ss', StandardScaler()),\n",
    "    ('poly', PolynomialFeatures(degree=3, include_bias=True)),\n",
    "    ('linear', ElasticNetCV(l1_ratio=[0.1, 0.3, 0.5, 0.7, 0.99, 1], alphas=np.logspace(-3, 2, 5),\n",
    "                            fit_intercept=False, max_iter=1e3, cv=3))\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始建模...\n",
      "R2: 0.806333520611\n",
      "均方误差： 16.1257365581\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEdCAYAAAAM1BBYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsnXd4FNXawH+bTTa9kxAgdEJXuoQm\nQYUA0kQ+8IJeRAQLCoiKBZSLoHK9FhRBhQsiCCIIiICItFCU0HsnoSQkpCebsptsme+PYSe76Qmb\nAvf8nmcfds6cM/PO8uS885bzHpUkSRICgUAg+J/HoboFEAgEAkHNQCgEgUAgEABCIQgEAoHgDkIh\nCAQCgQAQCkEgEAgEdxAKQSAQCASAUAgCgV3QarXVLYJAcNcIhSCoFuLi4njxxRe5efNmuccuXbqU\nH374odzjMjIyyM3NLfe40hg4cCD9+vUr97hLly6RmZlZqD02NpaqXB6k0+nKPebgwYNcvXq1EqQR\nVCdCIQgqhXfeeYft27cXez47O5vvvvuO7Ozscl/7s88+4+uvvy73uIYNG/Ldd98px3q9nuzsbMxm\nc6G+ZrO5zLJ169aNQ4cOERsbWy55Xn/9dZo3b45er7dpHzlyJN27d8dkMhU7VqfTkZeXV+S5U6dO\ncenSJa5fv17oc/HiRaKiopS+69evp1mzZuzatQuAc+fOsXPnzkKfxMREm3s888wzLF26tFzPK7gH\nkAQCO5OWliZ16NBBAqSRI0dKCQkJhfpER0dLgHT58uVyX799+/ZSz549yz0uICBA+u6775TjWbNm\nSYCkUqkkBwcHCZDUarWkVqsllUoleXt724y/efOmBJTrM3bs2CJlycjIkFxdXaWZM2fatEdGRkqA\n5OnpKV27dq3YZwkPD1dkt8isVquliIgIydnZWXJ3d5f8/f0lR0dHydnZWfL395f8/f0lNzc3qV+/\nfsp1EhISpD59+kgODg7S999/L02YMEHy9PSUmjZtqnwAacuWLTb3b926tfT++++X8ZcX3CsIC0Fg\nd3x8fDh69Cjz589n8+bNHD9+nBUrVqBSqZRPkyZNAGjevLlN+6+//lrq9dVqNWq1utR+Wq2WoUOH\nMnLkSJ566imysrKYP38+jzzyCD179qRv377k5eVhNptZtmwZ/v7+5OXlYTQaMZvNJCUl2VzP2dkZ\n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\npky5Z1fZrl69miVLlhAVFYWHh20g6MaNG/Tp04cxY8awf/9+QF5Z/O677xIWFkbt2rV5+umncXJy\nKjLgXatWLYYNGwbA4cOHK/9hBAJBpWGxEBSFEBUF166Bry+xQfl7KFSnhVCtC9NcXV0ZMWIETZo0\nqU4x7orRo0ezZ88eNmzYQO3atdmwYQM7duygadOmvP3226xfv57nn3+eW7dusWzZMnr27Imnpyev\nvPIKt27donv37qxfv165niRJmM1mTCYT3t7e9OzZk549eyruJZPJVF2PKhAI7oJCMYQ77iIefZSY\nzFtKvzRdGiZz9fyd3/O1jKobSZKYOnUq/v7+fPHFF3h5eQGwcOFCVq1axWuvvcbixYuZM2cOLVu2\nZP369UoweebMmUyYMIEvvviCXr164enpSW5uLsnJyQwcOJCAgAD+9a9/Kfc6cuQIRqORp556qjoe\nVSAQ3AWFXEYHD8r/9ulDrDa/sKWEREZuBn6uflUtolAId4tKpeLLL78s1O7o6MjYsWMZO3YsAN9+\n+22R42vXrs28efMUl5HFIhAIBPcXisso18plBNCyJbFJO2z6puSkVItCuC9qGQkEAkFNR3EZWSyE\na9fkf5s0IVYbC4BapQaqL44gFIJAIBBUMkazEZMkxwW0uVrQ6yEuDtRqCA4mJkOubNCyVkug+jKN\nhEIQCASCSsZiHYDsMpIs1kGDBuSpzCRkJ6BWqWkT2AYQFsI9jz1XWotqpwLB/YV1SWuTZEIffUk+\naNKEuMw4AOp41iHQLRCovtXKQiHYiUceeYRLl+T/5N9//52pU6fanP/000+VtQgWunfvXuS1RLVT\ngeD+wpJhZCHz2h2F0LixEj8I9gpWAsnCQriHOX36NEajkWbNmgHg5uaGi4sLkL+uYNy4cUybNo3L\nly8r4zQaTaFrRUVF4ezsTG5uLuvWrWPnzp1otVp++eUX1q1bp9R/EggE9w4FN73JvHFF/tK4sRI/\nCPYKxt/NH6i+GIJIO7UD77zzDo8++ihPPPEE6enpaLVaUlNTiYyMxGAwMGfOHB555BG2bNlCYGBg\nidd69913adWqFY899hgff/wxsbGxODg4kJGRwXvvvVej94UWCARFYx1DAMiMs84wuqMQPPMtBKEQ\n7IBqduVsJSnNKr7A3apVq4iKiqJLly789ttvAERERPDHH38wb948AObPn8+8efMwm80MGTKEzZs3\n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\n+Qo/iiwHAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1e3eb846c88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#model = RandomForestRegressor(n_estimators=50, criterion='mse')\n",
    "print('开始建模...')\n",
    "model.fit(x_train, y_train)\n",
    "# linear = model.get_params('linear')['linear']\n",
    "# print u'超参数：', linear.alpha_\n",
    "# print u'L1 ratio：', linear.l1_ratio_\n",
    "# print u'系数：', linear.coef_.ravel()\n",
    "\n",
    "order = y_test.argsort(axis=0)\n",
    "y_test = y_test[order]\n",
    "x_test = x_test[order, :]\n",
    "y_pred = model.predict(x_test)\n",
    "r2 = model.score(x_test, y_test)\n",
    "mse = mean_squared_error(y_test, y_pred)\n",
    "print('R2:', r2)\n",
    "print('均方误差：', mse)\n",
    "\n",
    "t = np.arange(len(y_pred))\n",
    "mpl.rcParams['font.sans-serif'] = ['simHei']\n",
    "mpl.rcParams['axes.unicode_minus'] = False\n",
    "plt.figure(facecolor='w')\n",
    "plt.plot(t, y_test, 'r-', lw=2, label='真实值')\n",
    "plt.plot(t, y_pred, 'g-', lw=2, label='估计值')\n",
    "plt.legend(loc='best')\n",
    "plt.title('波士顿房价预测', fontsize=18)\n",
    "plt.xlabel('样本编号', fontsize=15)\n",
    "plt.ylabel('房屋价格', fontsize=15)\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
